/**
 * PHP Zero Reference Highlighter Extension
 *
 * 这个扩展用于高亮显示 PHP 代码中的零引用方法和函数，
 * 帮助开发者识别和清理未使用的代码。
 *
 * @author Alex Shang
 * @version 0.0.2
 */

import * as vscode from 'vscode';
import { ExtensionManager } from './extensionManager';
import { Logger } from './logger';

let extensionManager: ExtensionManager | undefined;

/**
 * 扩展激活函数
 * 当扩展首次被激活时调用
 */
export function activate(context: vscode.ExtensionContext): void {
    const logger = Logger.getInstance();

    try {
        logger.info('PHP Zero Reference Highlighter 正在激活...');

        // 创建扩展管理器
        extensionManager = new ExtensionManager(context);

        logger.info('PHP Zero Reference Highlighter 激活成功！');

        // 显示激活消息（仅在调试模式下）
        const config = vscode.workspace.getConfiguration('phpZeroRefHighlighter');
        if (config.get<boolean>('enableDebugLog', false)) {
            vscode.window.showInformationMessage(
                'PHP Zero Reference Highlighter 已激活！',
                '查看日志'
            ).then(selection => {
                if (selection === '查看日志') {
                    logger.show();
                }
            });
        }

    } catch (error) {
        const errorMessage = `PHP Zero Reference Highlighter 激活失败: ${
            error instanceof Error ? error.message : String(error)
        }`;

        logger.error(errorMessage, error instanceof Error ? error : undefined);
        vscode.window.showErrorMessage(errorMessage);
    }
}

/**
 * 扩展停用函数
 * 当扩展被停用时调用
 */
export function deactivate(): void {
    const logger = Logger.getInstance();

    try {
        logger.info('PHP Zero Reference Highlighter 正在停用...');

        // 释放扩展管理器资源
        if (extensionManager) {
            extensionManager.dispose();
            extensionManager = undefined;
        }

        logger.info('PHP Zero Reference Highlighter 已停用');

    } catch (error) {
        logger.error('扩展停用时发生错误', error instanceof Error ? error : undefined);
    }
}
